package src.DisciplesPlan.链表;

/**
 * 存在一个按升序排列的链表，给你这个链表的头节点 head ，请你删除链表中所有存在数字重复情况的节点，只保留原始链表中 没有重复出现 的数字。

 返回同样按升序排列的结果链表。

 示例 1：


 输入：head = [1,2,3,3,4,4,5]
 输出：[1,2,5]
 示例 2：


 输入：head = [1,1,1,2,3]
 输出：[2,3]
 */

public class _82删除排序链表中的重复元素II {
    public ListNode deleteDuplicates(ListNode head) {
        if (head == null)
            return null;
        ListNode q;
        // 虚拟头结点
        ListNode virNode = new ListNode(0);
        // 连接到原链表
        virNode.next = head;
        // 遍历指针
        ListNode p = virNode;
        while (p.next != null) {
            if (p.next.next != null && p.next.val == p.next.next.val) {
                // 让q指针继续往后寻找下一个不相等的结点
                q = p.next.next;
                while (q != null && q.val == p.next.val) {
                    q = q.next;
                }
                p.next = q;
            }else {
                p = p.next;
            }
        }
        return virNode.next;
    }
}
